package $packagename;

import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.icu.util.Calendar;
import android.net.Uri;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebView;
import android.widget.Toast;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class  GodGou_JavascriptInterface {

    WebView webview;
    Context context;
    Activity activity;

    public GodGou_JavascriptInterface(Activity act, WebView web) {
        activity = act;
        context= activity.getApplicationContext();
        webview = web;
    }
    /**
     * HTML转义
     */
    public String HtmlEscaped(String codestr) {
        codestr = codestr.replaceAll("\"", "&quot;");
        codestr = codestr.replaceAll("'", "&apos;");
        codestr = codestr.replaceAll("\n", "&#10;");
        codestr = codestr.replaceAll("\r", "&#13;");
        codestr = codestr.replaceAll(" ", "&nbsp;");
        codestr = codestr.replaceAll("<", "&lt;");
        codestr = codestr.replaceAll(">", "&gt;");
        return codestr;
    }
    /**
     * 执行js脚本
     */
    public void GodGou_CallJs(String s) {
        Runnable jsrun = new Runnable() {
            @Override
            public void run() {
                webview.evaluateJavascript(s, new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {//接收回调
                    }
                });
            }
        };
        webview.post(jsrun);
    }
    /**
     * 网络密码显示网络内容
     * 匹配的密码和要显示的内容都是从给定的网络连接中获取
     * @param id 要显示内容标签的id
     * @param passval 密码输入框的值类似$('#id').val()
     * @param passurl 密码的网络连接地址
     * @param texturl 要显示内容的网络连接地址
     */
    public void DynamicContentByWeb(String id,String passval,String passurl,String texturl){
        Runnable js = new Runnable() {
            @Override
            public void run() {
                try{
                    URL url=new URL(passurl);
                    HttpURLConnection urlcon= (HttpURLConnection) url.openConnection();
                    InputStream inputStream=urlcon.getInputStream();
                    if(passval.equals(inputStream.toString())){
                        Toast.makeText(context, "密码错误", Toast.LENGTH_LONG).show();
                        return;
                    }
                    url=new URL(texturl);
                    urlcon= (HttpURLConnection) url.openConnection();
                    inputStream=urlcon.getInputStream();
                    String js="$('#"+id+"').html('"+HtmlEscaped(inputStream.toString())+"').show();";
                    GodGou_CallJs(js);
                }catch(Exception e){
                    Toast.makeText(context, "未知错误", Toast.LENGTH_LONG).show();
                }
            }
        };
        new Thread(js).start();
    }
    /**
     * 动态密码显示固定内容
     * 密码为每小时变化，即：月份+日+时+你设置的值，比如现在是11月25号13点01分，你设置的值为1949，那么112513+1949密码就是：114462
     * @param val 你设置的值
     * @param id 要显示内容标签的id
     * @param pass 密码输入框的值，类似$('#id').val()
     */
    public void DynamicPassword(String val,String id,String pass){
        Runnable js = new Runnable() {
            @Override
            public void run() {
                try{
                    Calendar calendar= Calendar.getInstance();
                    String m=calendar.get(Calendar.MONTH)+1+"";
                    String d=calendar.get(Calendar.DAY_OF_MONTH)+"";
                    String h=calendar.get(Calendar.HOUR_OF_DAY)+"";
                    if((m+d+h+val).equals(pass)){
                        String js="$('#"+id+"').show();";
                        GodGou_CallJs(js);
                    }else{
                        Toast.makeText(context, "密码有误", Toast.LENGTH_LONG).show();
                    }
                }catch(Exception e){
                    Toast.makeText(context, "未知错误", Toast.LENGTH_LONG).show();
                }
            }
        };
        new Thread(js).start();
    }
    /**
     * 打开应用
     * 根据包名启动一个app,比如qq的包名com.tencent.mobileqq
     * @param appPackageName app包名
     */
    public void StartAPP(String appPackageName){
        try{
            Intent intent = activity.getPackageManager().getLaunchIntentForPackage(appPackageName);
            activity.startActivity(intent);
        }catch(Exception e){
            Toast.makeText(context, "没有安装", Toast.LENGTH_LONG).show();
        }
    }
    /**
     *在浏览器中打开链接
     * 调用系统浏览器打开指定网址
     * @param u 网址
     *
     */
    @JavascriptInterface
    public void OpenUrlInBrowser(String u) {
        Uri uri = Uri.parse(u);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        activity.startActivity(intent);
    }
    /**
     *打开相机
     * 调用系统相机
     * 需要在onActivityResult接受回调，requestCode为200
     */
    @JavascriptInterface
    public void OpenCAMERA() {
        Intent intent = new Intent();
        intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
        activity.startActivityForResult(intent, 200);
    }
    /**
     * 弹出提示语
     * 3秒后自动消失
     * @param s 提示语
     *
     */
    @JavascriptInterface
    public void ShowTip(String s) {
        Toast.makeText(context, s, Toast.LENGTH_LONG).show();
    }
    /**
     * 打开文件管理器
     * 调出选择文件管理器选择文件，需要在onActivityResult接受回调，requestCode为100
     * @param type 文件类型，比如所有图片类型（image/**），所有音频（audio/**），或者指定mp4后缀（application/mp4）
     */
    @JavascriptInterface
    public void SelectFile(String type) {
        Runnable js = new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType(type);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                activity.startActivityForResult(intent, 100);
            }
        };
        new Thread(js).start();
    }
    /**
     * 设置剪切板内容
     *设置剪切板纯文本内容
     * @param s 纯文本内容
     */
    @JavascriptInterface
    public void SetClip(String s) {
        ClipboardManager cmb = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
        //创建纯文本字符型ClipData
        ClipData mClipData = ClipData.newPlainText("label", s);
        cmb.setPrimaryClip(mClipData);
    }
    /**
     * 申请加QQ群
     * 发起手Q客户端申请加QQ群
     * @param key 由官网生成的key
     */
    @JavascriptInterface
    public void JoinQQGroup(String key){
        Intent intent = new Intent();
        intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D" + key));
        try {
            activity.startActivity(intent);
        } catch (Exception e) {
            Toast.makeText(context,"未安装手Q或安装的版本不支持", Toast.LENGTH_LONG).show();
        }
    }
}
